home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / EV61.ARJ / EV61.DOC < prev    next >
Text File  |  1996-07-21  |  12KB  |  219 lines

  1.            EGT Viewer V6.1 Copyright 1996 by Beowulf Shaeffer
  2.         B2E Conversionprogram V4.0 Copyright by Beowulf Shaeffer
  3.         ========================================================
  4.                   Member of The Powerdrome's Beta Zone
  5.  
  6. THE PURPOSE OF THIS FILE
  7. ------------------------
  8. This file, I hope, can be  used as a tutorial on building software. I mean all
  9. the steps, from the  problem to the solution. Naturally is this just one case,
  10. and not all  problems are  easy to solve. The 'problem' I refer to, is in this 
  11. case, 'to display a  picture, quickly and with very little code'. The solution
  12. however, consists not only of the  source of the  progam(s), but the reasoning 
  13. in this tutorial contributes to it  heavily also. Understanding  and imagining
  14. the steps  one by  one will make you a better  programmer also. (Not  that I'm
  15. making millions while programming :-) Short sentences should  help you, under-
  16. standing  the what  the how and the why. Topics  will be handled, as they come
  17. up.
  18.  
  19. DISCLAIMER
  20. ----------
  21. I hate this sort of things, anyway: 
  22.         IF YOU DECIDE TO USE IT, IT'S YOUR RESPONSIBILITY, NOT MINE!
  23.         USE AT YOUR OWN RISK. YES IT'S PUBLIC-DOMAIN, EXEPT FOR EV.COM AND
  24.         B2E.EXE, THOSE ARE FREEWARE.
  25. This file was created as a tutorial for the X2 contest 1995 (great guys!).
  26.  
  27. THE PROBLEM
  28. -----------
  29. When  I  make  programs,  mostly in BASIC,  I also  want to  make  the program 
  30. attractive by showing some intro's or other pictures. Using the PSET statement
  31. a whole lot of code-lines must  be used to make a logo of some sort.  All that
  32. code, I like to call that 'overhead', is a waste of memory. Then it struck me! 
  33. Make a picture,  or logo in this case, with a  paint-program, and just display
  34. it using a short (ASM) routine.
  35.  
  36. POSSIBILITIES
  37. -------------
  38. Make a  picture with  a paint-program.  View it  with a  viewer for  the used, 
  39. format and grab the video-memory with a picture-grabber. 
  40.         GRABBERS:
  41.         A grabber takes  a look at your screen,  and transfers all  colors and
  42.         text and graphics to  file(s). Mostly a grabber  makes a palette-, and
  43.         a datablockfile. (PAL and BLD files)
  44. The BLD file can be loaded using the BASIC BLOAD statement.  The PAL (palette) file however, is more tricky! I tried to
  45. load the  palette (ANY  palette) into the  PALETTE USING  statement, using the
  46. right procedures of putting it in an array first.
  47.         PALETTE:
  48.         A palette, is a set of  values, that represent the RED, GREEN and BLUE
  49.         levels in each of the  256 colors.  So 256 colors times 3 (R, G and B)
  50.         is 768 bytes.
  51. This program still was big  AND slow.  The loading  of the  picture wasn't the 
  52. problem here, but the palette-loading took  a second or two.  Too long for 768 
  53. bytes, I think... Instead of loading the two files, it would be better to load 
  54. only one file. A BMP file had the right format I think! 
  55.         BMP FORMAT:
  56.         The file starts with a header  of 54  bytes. They are of no use to us.
  57.         Then, a  block  of 1024 (!)  bytes  represents  the  palette  for  the 
  58.         picture.  Yes,  every color has  4 bytes instead of 3. (R, G, B and 0)
  59.         Every value for the colorcomponents, lies between 0 and 255. After the 
  60.         last palettebyte, the actual  picture comes. In our case 320x200 bytes 
  61.         or 64000.  A typical  320x200x256 BMPfile is 65078 bytes large.  There 
  62.         ARE compressed BMPfiles, but they are of no use for us.
  63. These BMP's are UNCOMPRESSED, so I didn't have to  worry about  decompressing, 
  64. what would take extra time to do.  Taking care of the  loading of the palette, 
  65. wasn't that big of a challenge, however programming  the colorvalues in BASIC, 
  66. requires values from 0 to 63, so  devision  by 4 was a must!  Reading line for 
  67. line, and BLOADING the rest of the BMPfile,  I suddenly became aware, that BMP 
  68. files are written UPSIDE-DOWN! The conversion from 4 to 3 bytes per color, and
  69. the devision of the values made the whole  program slower.  Making the program 
  70. writing the picture from down to up,  decreased the  speed also. I had to come 
  71. up with a better solution.
  72.  
  73. THE BETTER SOLUTION
  74. -------------------
  75. My interest in  assembly-coding increases everytime  something has to be small
  76. and quick.  So I decided  to do 'it'  in assembler!  I have a great book, that
  77. came  with my  MS-DOS 3.21, called  'PROGRAMMER'S REFERENCE'.  Reading it is a
  78. great  help for  gaining ideas for  problem-solving.  There are DOS- and BIOS-
  79. functions, described in detail. 
  80.         DOS AND BIOS FUNCTIONS
  81.         A basic I/O system  (BIOS) provides 'simple' access to hardware in the
  82.         computer.  The disk operating  system (DOS) provides  us with the more
  83.         advanced  functions.  When a function  is needed, some  registers must
  84.         have specific values, so the routines know what operations to do. More
  85.         about this in the ASM file.
  86. Some functions, I decided to go along with, just HAD to be used.  For instance
  87. the  LOAD PALETTE BLOCK  function, sounded great!  And READ BLOCK FROM DISK is
  88. another interesting one! 
  89.  
  90. COMPATTIBILITY
  91. --------------
  92. All people of the world  should be able to view the pictures  made by me, so I 
  93. went along with the 320x200x256 mode, or mode 13h. All computers with ANY kind 
  94. of VGA adapter can view in mode 13h.  The only thing I had to do, was to check 
  95. if a VGA card is present. No VGA means no display!
  96.  
  97. CONVERSION
  98. ----------
  99. Now  another  point:  The smaller the file is,  the quicker  it's  in  memory!
  100. There are 1024 bytes as a palette in a BMP file. Every fourth byte can be left
  101. out of the palette, so the complete palette should take 768 bytes.  Ofcause we
  102. lose the header.  We just reduced the  file with 310 bytes.  The function that
  103. loads a  palette  block in assembler,  uses an other order of colors.  B and R
  104. must be swapped.  AND ofcause  the picture must  be put upside-down.  When the
  105. picture  is  right-side-up, only  ONE functioncall  loads the entire  picture!
  106. To do the  conversion I  built myself a  convertor called  B2E, or BMP to EGT.
  107. Well I  had to  give it a  name, so I took  EGT (local humor) as an extention.
  108. The source is in  QB45 basic, and a lot of remarks  should make it clearer for
  109. you  to understand  the process of conversion.  The trick here is, to load the
  110. BMP file slowly and from bottom to top.  After that, all colors are loaded and
  111. converted. This complete  process is kind of slow, and the output EGT file, is 
  112. written.  The  inputfile (BMP)  is  checked  for it's  size, to  determine the 
  113. format.  Now, the  conversion takes a  lot of time, but the loading of the EGT
  114. file by the viewer-routine will be fast as lightning!
  115.  
  116. USING B2E
  117. ---------
  118. Type B2E filename (without extention)
  119.         When the  file is found,  the picture will be drawn form bottom to top
  120.         but in a default  palette.  Calculating the new  palette, you will see
  121.         the picture getting more and more it's own colors. When the colors are 
  122.         complete, the led on the drive should be blinking. When the writing is 
  123.         done, the screen returns to the normal screenmode.
  124.  
  125. USED PROGRAMMING SOFTWARE
  126. -------------------------
  127. Any ASCII editor, such as EDIT.COM (MS-DOS 5.0+)
  128. Any assembler, such as MASM, TASM or WASM (WASM is shareware, perfect!)
  129. QBASIC or QB
  130.  
  131. UPDATE #1
  132. ---------
  133. Along the  way and  improving the viewer, there came up some ideas, which were
  134. implemented  with  very  little  effort.  It is possible to chain multiple EGT 
  135. files using:
  136.  
  137.         COPY /B PICTURE1.EGT+PICTURE2.EGT+PICTURE3.EGT GROUP.EGT
  138.  
  139. So, multiple  pictures can be packed into ONE single file! Nice huh?  The last
  140. update  provided  browsing  functions to the viewer.  You can  view the [HOME]
  141. picture  (first one), the  [END] picture (last one), and using  left and right
  142. cursor keys to view the previous and next picture.
  143.  
  144. FUNNY
  145. -----
  146. I  stretched  the machine-code  to 512 bytes, so that the program will take up
  147. exactly 1 cluster of a (floppy-) disk.
  148.  
  149. PROGRAMMING IN ASSEMBLER
  150. ------------------------
  151. The why,  and the  order of  the assembly-listing  is described  in the EV.ASM
  152. file.  So I won't get into it here too much.  Fighting segment-adresses, I had
  153. to use a debugger.  The debugger I used, is called AFD, or Advanced Fullscreen
  154. Debug.  The MS-DOS's  DEBUG will  do also...  Borland's  TASM, which  I bought
  155. recently,  is a  little fuzzy  to me  right now, so I  used WASM in this  case
  156. instead.  The syntax,  used to  create EV.ASM  is NOT recognisable by  TASM or
  157. MASM. You have to alter it to your own assembler. Another disadvantage of TASM
  158. in this case is, the  object linking and the exe to bin conversion is a little
  159. too much work. WASM converts an ASM directly to the COM version.
  160.  
  161. EV PRACTICAL
  162. ------------
  163. EGT Viewer, in the practical house of terms, is very #$$@$# FAST! The display-
  164. speed is as fast as the drive with the EGT file.  It's  NOT possible to make a
  165. faster viewer! (Hey, this  software runs on a  XT also!) The picture is loaded
  166. using only two  function-commands!  Above, I mentioned a way to make multiple-
  167. picture-EGT files. The displaying of this groupfile must be done with:
  168.  
  169. "EV GROUP".
  170.  
  171. By the way, up to 22 EGT pictures can be put into one on a HD 3.5" floppy! The
  172. EV.COM can be put on it also! If the pictures were archived, up to 32 pictures
  173. would fit on a 1.44 floppy. Viewing the groupfile, and the last picture of the
  174. file is on your  screen,  pressing right- or up-arrow will  result in an exit.
  175. That  means that the  screen is switched back to  textmode, and you're back in
  176. DOS (or Windows).  Pressing ESC at ANY point of viewing will also  return your
  177. PC to textmode/DOS or Windows.
  178.  
  179. THE PURPOSE OF THE VIEWER
  180. -------------------------
  181. It turned  out to  be a great  way for  making small  introductions  etcetera.
  182. However, I first  wanted to  make a  picture-loader (viewer)  to build into my
  183. BASIC programs, so the problem was solved.
  184.         BUILDING IT IN
  185.         Using  the  QB45  quick  library  QB.LQB,  it's  possible to do a CALL 
  186.         ABSOLUTE to a string with the machine-code.
  187. Also the quick loading of pictures, can be used in games. 
  188.  
  189. UPDATE #2
  190. ---------
  191. I just  bought myself  a copy  of Windows'95.  The funny thing about that, and
  192. other versions of Windows, are the  ASSOCIATE routines.  These  little buggers
  193. open the  viewer files  by INCLUDING the .EGT  extention to the file! I'm very
  194. new at the '95 thing, and there MAY be a solution to it, but I decided to make
  195. a  little  modification  to  the viewer.  Now you may  or may not use the .EGT
  196. extention on  the commandline.  The .ASM source is updated, so the how will be
  197. explained also.  I justified  the text in this .DOC  a  little  bit for  nicer
  198. printing.
  199.  
  200. THANX
  201. -----
  202. This  little tutorial  got me the second price in the '95 contest. I'd like to
  203. thank everyone who made that possible.
  204.  
  205. EPILOG
  206. ------
  207. I hope  you learned something about the thoughts involving programming.  Maybe
  208. in the future, it's recommendable  to switch the file's extentions from EGT to
  209. X2P (X2 Picture:-).  You  may  use  the sources for your own purposes, but the
  210. EV.COM and B2E.EXE may NOT be altered. Any programs made using my sources MUST
  211. have other names! Let me know, if you like the routines... 
  212.  
  213. E-mail me : beowulf@iaehv.nl (if I still have my account there then)
  214. Fidonet   : 2:292/114.8
  215.  
  216. Greetings from Beowulf Shaeffer (Dolf Spoor)
  217.                Geldrop, The Netherlands
  218.  
  219.